Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2014, 20:14
Новичок на форуме
Отправить личное сообщение для kames Посмотреть профиль Найти все сообщения от kames
 
Регистрация: 28.08.2014
Сообщений: 6

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но почему-то большие объёма данных приходят т.е. отправляю json иногда json приходит целый не разбитый а иногда почастям и мы не поймём в чём дело может кто-то с таким сталкивался? Хотя клиент и сервер на ноде работает без нареканий с тем же json и клиент и сервер на андроиде тоже работает без нареканий с тем же json.
Вот код сервера простенький пример
// server
require('net').createServer(function (socket) {
    console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
    socket.on('data', function (data) {
        console.log(data.toString());
//        var dat = data.toString();
        console.log('end revice!');
    });
 
})
 
.listen(3000);
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2014, 20:43
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,140

http://nodejs.org/api/net.html#net_event_data <-- внимательно прочитать
http://nodejs.org/api/net.html#net_event_end <-- внимательно прочитать 2
http://nodejs.org/api/net.html#net_event_error_1 <-- внимательно прочитать 3
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2014, 15:03
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

действительно, в data может прийти не весь объем данных, а чанк, т.е. кусок цепочки..
данные из data нужно накапливать в любом случае, это нормальная практика.
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2014, 19:51
Новичок на форуме
Отправить личное сообщение для kames Посмотреть профиль Найти все сообщения от kames
 
Регистрация: 28.08.2014
Сообщений: 6

Как я пойму что пользователь закончил передачу сообщения?
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2014, 19:56
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kames,
тебе, наверное, в кайф писать новый вопрос, вместо того, чтобы пройтись по ссылкам, что дал MallSerg? Смысл тогда вообще помогать?
Ответить с цитированием
  #6 (permalink)  
Старый 29.08.2014, 20:33
Новичок на форуме
Отправить личное сообщение для kames Посмотреть профиль Найти все сообщения от kames
 
Регистрация: 28.08.2014
Сообщений: 6

Поправьте меня если я не правильно понял
// server
require('net').createServer(function (socket) {
    var buffer;
    console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
        socket.write('Идёт приём сообщения!');
    socket.on('data', function (data) {
        buffer += data;
    });
    socket.on('end', function () {
        console.log('Пакет сообщения принят!')
        console.log(buffer);
    });

})
.listen(3000);
Ответить с цитированием
  #7 (permalink)  
Старый 29.08.2014, 20:35
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

kames,
в роде бы так, но лучше протестировать.
Ответить с цитированием
  #8 (permalink)  
Старый 29.08.2014, 20:42
Новичок на форуме
Отправить личное сообщение для kames Посмотреть профиль Найти все сообщения от kames
 
Регистрация: 28.08.2014
Сообщений: 6

Фишка в том что приходит json массив с андроида [{}] и в data он оборачивается в e[{}] а в buffer приходит undefinede[{}]
Ответить с цитированием
  #9 (permalink)  
Старый 29.08.2014, 20:44
Новичок на форуме
Отправить личное сообщение для kames Посмотреть профиль Найти все сообщения от kames
 
Регистрация: 28.08.2014
Сообщений: 6

// server
 var es = require('event-stream');
require('net').createServer(function (socket) {
    console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
    socket.pipe(es.split())
    .pipe(es.map(function (data, cb) {
        console.log('Got the following message:', data);
        cb(null)
    }));
    socket.on('end', function () {
        console.log("ended: ", socket.remoteAddress, " : ", socket.remotePort);
    });

})
.listen(3000);

Была у меня ещё такая реализация но там почему-то добавляется пустой квадрат перед e[{}]
Ответить с цитированием
  #10 (permalink)  
Старый 31.08.2014, 20:49
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

kames, бегом читать документацию!!!..
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск